/***************************************************************************\
*
* Module Name: PMDEV.H
*
* OS/2 Presentation Manager Device Context constants, types and
* function declarations
*
* Copyright (c) 1989-1990, Microsoft Corporation.  All rights reserved.
*
* =======================================================================
*
* The folowing symbols are used in this file for conditional sections.
*
* INCL_DEVERRORS		- defined if INCL_ERRORS defined
*
* There is a symbol used in this file called INCL_DDIDEFS. This is used to
* include only the definitions for the DDI. The programmer using the GPI
* can ignore this symbol
*
* There is a symbol used in this file called INCL_SAADEFS. This is used to
* include only the definitions for the SAA. The programmer using the GPI
* can ignore this symbol
*
\***************************************************************************/

#ifdef INCL_ERRORS /* if errors are required then allow DEV errors */
    #define INCL_DEVERRORS
#endif /* INCL_ERRORS */

#ifdef INCL_DDIDEFS /* if only DDI required then enable all of DEV */
    #define INCL_DEV
#endif /* INCL_DDIDEFS */

#ifdef INCL_SAADEFS /* if only SAA required then enable all of DEV */
    #define INCL_DEV
#endif /* INCL_SAADEFS */

#if ((defined(INCL_DEV) || !defined(INCL_NOCOMMON)) && !defined(INCL_DEV_INCLUDED))
#define INCL_DEV_INCLUDED

/* General DEV return values */
#define DEV_ERROR			0L
#define DEV_OK				1L

/* pointer data for DevOpenDC */
typedef PSZ FAR *PDEVOPENDATA;

/* DC type for DevOpenDC */
#define OD_QUEUED			2L
#define OD_DIRECT			5L
#define OD_INFO 			6L
#define OD_METAFILE			7L
#define OD_MEMORY			8L
#define OD_METAFILE_NOQUERY		9L

/* codes for DevQueryCaps */
#define CAPS_FAMILY			 0L
#define CAPS_IO_CAPS			 1L
#define CAPS_TECHNOLOGY 		 2L
#define CAPS_DRIVER_VERSION		 3L
#define CAPS_WIDTH			 4L	/* pels 	  */
#define CAPS_HEIGHT			 5L	/* pels 	  */
#define CAPS_WIDTH_IN_CHARS		 6L
#define CAPS_HEIGHT_IN_CHARS		 7L
#define CAPS_HORIZONTAL_RESOLUTION	 8L	/* pels per meter */
#define CAPS_VERTICAL_RESOLUTION	 9L	/* pels per meter */
#define CAPS_CHAR_WIDTH 		10L	/* pels 	  */
#define CAPS_CHAR_HEIGHT		11L	/* pels 	  */
#define CAPS_SMALL_CHAR_WIDTH		12L	/* pels 	  */
#define CAPS_SMALL_CHAR_HEIGHT		13L	/* pels 	  */
#define CAPS_COLORS			14L
#define CAPS_COLOR_PLANES		15L
#define CAPS_COLOR_BITCOUNT		16L
#define CAPS_COLOR_TABLE_SUPPORT	17L
#define CAPS_MOUSE_BUTTONS		18L
#define CAPS_FOREGROUND_MIX_SUPPORT	19L
#define CAPS_BACKGROUND_MIX_SUPPORT	20L
#define CAPS_DEVICE_WINDOWING		31L
#define CAPS_ADDITIONAL_GRAPHICS	32L
#define CAPS_VIO_LOADABLE_FONTS 	21L
#define CAPS_WINDOW_BYTE_ALIGNMENT	22L
#define CAPS_BITMAP_FORMATS		23L
#define CAPS_RASTER_CAPS		24L
#define CAPS_MARKER_HEIGHT		25L	/* pels 	  */
#define CAPS_MARKER_WIDTH		26L	/* pels 	  */
#define CAPS_DEVICE_FONTS		27L
#define CAPS_GRAPHICS_SUBSET		28L
#define CAPS_GRAPHICS_VERSION		29L
#define CAPS_GRAPHICS_VECTOR_SUBSET	30L
#define CAPS_PHYS_COLORS		33L
#define CAPS_COLOR_INDEX		34L
#define CAPS_GRAPHICS_CHAR_WIDTH	35L
#define CAPS_GRAPHICS_CHAR_HEIGHT	36L
#define CAPS_HORIZONTAL_FONT_RES	37L
#define CAPS_VERTICAL_FONT_RES		38L
#define CAPS_DEVICE_FONT_SIM		39L

/* Constants for CAPS_IO_CAPS */
#define CAPS_IO_DUMMY			1L
#define CAPS_IO_SUPPORTS_OP		2L
#define CAPS_IO_SUPPORTS_IP		3L
#define CAPS_IO_SUPPORTS_IO		4L

/* Constants for CAPS_TECHNOLOGY */
#define CAPS_TECH_UNKNOWN		0L
#define CAPS_TECH_VECTOR_PLOTTER	1L
#define CAPS_TECH_RASTER_DISPLAY	2L
#define CAPS_TECH_RASTER_PRINTER	3L
#define CAPS_TECH_RASTER_CAMERA 	4L
#define CAPS_TECH_POSTSCRIPT		5L

/* Constants for CAPS_COLOR_TABLE_SUPPORT */
#define CAPS_COLTABL_RGB_8		1L
#define CAPS_COLTABL_RGB_8_PLUS 	2L
#define CAPS_COLTABL_TRUE_MIX		4L
#define CAPS_COLTABL_REALIZE		8L

/* Constants for CAPS_FOREGROUND_MIX_SUPPORT */
#define CAPS_FM_OR			 1L
#define CAPS_FM_OVERPAINT		 2L
#define CAPS_FM_XOR			 8L
#define CAPS_FM_LEAVEALONE		16L
#define CAPS_FM_AND			32L
#define CAPS_FM_GENERAL_BOOLEAN 	64L

/* Constants for CAPS_BACKGROUND_MIX_SUPPORT */
#define CAPS_BM_OR			 1L
#define CAPS_BM_OVERPAINT		 2L
#define CAPS_BM_XOR			 8L
#define CAPS_BM_LEAVEALONE		16L

/* Constants for CAPS_DEVICE_WINDOWING */
#define CAPS_DEV_WINDOWING_SUPPORT	1L

/* Constants for CAPS_ADDITIONAL_GRAPHICS */
#define CAPS_GRAPHICS_KERNING_SUPPORT	 2L
#define CAPS_FONT_OUTLINE_DEFAULT	 4L
#define CAPS_FONT_IMAGE_DEFAULT 	 8L
/* bits represented by values 16L and 32L are reserved */
#define CAPS_SCALED_DEFAULT_MARKERS	64L
#ifndef INCL_SAADEFS

/* Constants for CAPS_WINDOW_BYTE_ALIGNMENT */
#define CAPS_BYTE_ALIGN_REQUIRED	0L
#define CAPS_BYTE_ALIGN_RECOMMENDED	1L
#define CAPS_BYTE_ALIGN_NOT_REQUIRED	2L
#endif /* no INCL_SAADEFS */

/* Constants for CAPS_RASTER_CAPS */
#define CAPS_RASTER_BITBLT		 1L
#define CAPS_RASTER_BANDING		 2L
#define CAPS_RASTER_BITBLT_SCALING	 4L
#define CAPS_RASTER_SET_PEL		16L
#define CAPS_RASTER_FONTS		32L

#ifndef INCL_DDIDEFS
HDC  APIENTRY DevOpenDC(HAB hab, LONG lType, PSZ pszToken,
			LONG lCount, PDEVOPENDATA pdopData, HDC hdcComp);
HMF  APIENTRY DevCloseDC(HDC hdc);
BOOL APIENTRY DevQueryCaps(HDC hdc, LONG lStart, LONG lCount, PLONG alArray);
#endif /* no INCL_DDIDEFS */

/* end of common DEV */

#ifdef	INCL_DEV

#ifndef INCL_SAADEFS
/* structures for DEVESC_QUERYVIOCELLSIZES */
typedef struct _VIOSIZECOUNT { /* vios */
	LONG maxcount;
	LONG count;
} VIOSIZECOUNT;
typedef VIOSIZECOUNT FAR * PVIOSIZECOUNT;

typedef struct _VIOFONTCELLSIZE { /* viof */
	LONG cx;
	LONG cy;
} VIOFONTCELLSIZE;
typedef VIOFONTCELLSIZE FAR * PVIOFONTCELLSIZE;

/* structure for DEVESC_GETCP */
typedef struct _ESCGETCP { /* escgcp */
	ULONG  options;
	USHORT codepage;
	USHORT fontid;
} ESCGETCP;
typedef ESCGETCP FAR * PESCGETCP;

/* return codes for DevEscape */
#define DEVESC_ERROR		      (-1L)
#define DEVESC_NOTIMPLEMENTED		0L

/* codes for DevEscape */
#define DEVESC_QUERYESCSUPPORT		0L
#define DEVESC_GETSCALINGFACTOR 	1L
#define DEVESC_QUERYVIOCELLSIZES	2L
#define DEVESC_GETCP		     8000L

#define DEVESC_STARTDOC 	     8150L
#define DEVESC_ENDDOC		     8151L
#define DEVESC_NEXTBAND 	     8152L
#define DEVESC_ABORTDOC 	     8153L

#define DEVESC_NEWFRAME 	    16300L
#define DEVESC_DRAFTMODE	    16301L
#define DEVESC_FLUSHOUTPUT	    16302L
#define DEVESC_RAWDATA		    16303L
#define DEVESC_DBE_FIRST	    24450L
#define DEVESC_DBE_LAST 	    24455L

/* DevEscape codes for adding extra space to character strings */
#define DEVESC_CHAR_EXTRA	    16998L
#define DEVESC_BREAK_EXTRA	    16999L

/* codes for DevEscape PM_Q_ESC spool files */
#define DEVESC_STD_JOURNAL	    32600L

/* return codes for DevPostDeviceModes */
#define DPDM_ERROR		      (-1L)
#define DPDM_NONE			0L

/* codes for DevPostDeviceModes */
#define DPDM_POSTJOBPROP		0L
#define DPDM_CHANGEPROP 		1L
#define DPDM_QUERYJOBPROP		2L

/* string types for DevQueryDeviceNames */
typedef CHAR STR16[16]; 	/* str16 */
typedef STR16 FAR *PSTR16;
typedef CHAR STR32[32]; 	/* str32 */
typedef STR32 FAR *PSTR32;
typedef CHAR STR64[64]; 	/* str64 */
typedef STR64 FAR *PSTR64;

/* return code for DevQueryHardcopyCaps */
#define DQHC_ERROR		      (-1L)
/* codes for DevQueryHardcopyCaps */
#define HCAPS_CURRENT			1L
#define HCAPS_SELECTABLE		2L

/* structure for DevQueryHardcopyCaps */
typedef struct _HCINFO {	/* hci */
	CHAR szFormname[32];
	LONG cx;
	LONG cy;
	LONG xLeftClip;
	LONG yBottomClip;
	LONG xRightClip;
	LONG yTopClip;
	LONG xPels;
	LONG yPels;
	LONG flAttributes;
} HCINFO;
typedef HCINFO FAR *PHCINFO;

/* Device Context Functions */
#ifndef INCL_DDIDEFS

LONG APIENTRY DevEscape(HDC hdc, LONG lCode, LONG lInCount, PBYTE pbInData,
			PLONG plOutCount, PBYTE pbOutData);
BOOL APIENTRY DevQueryDeviceNames(HAB hab, PSZ pszDriverName, PLONG pldn,
				  PSTR32 aDeviceName, PSTR64 aDeviceDesc,
				  PLONG pldt, PSTR16 aDataType);
LONG APIENTRY DevQueryHardcopyCaps(HDC hdc, LONG lStartForm,
				   LONG lForms, PHCINFO phciHcInfo);
LONG APIENTRY DevPostDeviceModes(HAB hab, PDRIVDATA pdrivDriverData,
				 PSZ pszDriverName, PSZ pszDeviceName,
				 PSZ pszName, ULONG flOptions);

#endif /* no INCL_DDIDEFS */
#endif /* no INCL_SAADEFS */

#endif /* INCL_DEV */
#endif /* INCL_DEV or COMMON */

#ifdef INCL_DEVERRORS

/* AAB error codes for the DEV - same as GPI errors at present */

#endif /* INCL_DEVERRORS */
